package com.wyq.mail;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class SimpleMailSender {
	
	public boolean sendTextMail(MailSenderInfo mailInfo) {  
			// 判断是否需要身份认证  
			MyAuthenticator authenticator = null;  
			Properties pro = mailInfo.getProperties();  
			if (mailInfo.isValidate()) {   
				// 如果需要身份认证，则创建一个密码验证器  
			authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());  
			}  
			// 根据邮件会话属性和密码验证器构造一个发送邮件的	session  
			Session sendMailSession = Session.getDefaultInstance(pro, authenticator);  
			try {   
				// 根据session创建一个邮件消息   
			Message mailMessage = new MimeMessage(sendMailSession);   
			// 创建邮件发送者地址   
			Address from = new InternetAddress(mailInfo.getFromAddress());   
			// 设置邮件消息的发送者   
			mailMessage.setFrom(from);   
			// 创建邮件的接收者地址，并设置到邮件消息中   
			Address to = new InternetAddress(mailInfo.getToAddress());   
			mailMessage.setRecipient(Message.RecipientType.TO, to);   
			// 设置邮件消息的主题   
			mailMessage.setSubject(mailInfo.getSubject());   
			// 设置邮件消息发送的时间   
			mailMessage.setSentDate(new Date());   
			// 设置邮件消息的主要内容   
			String mailContent = mailInfo.getContent();   
			mailMessage.setText(mailContent);   
			// 发送邮件   
			Transport.send(mailMessage);   
				return true;  
			} catch (MessagingException ex) {   
				ex.printStackTrace();  
			}  
			return false; 
			}
		  public static boolean sendHtmlMail(MailSenderInfo mailInfo) {  
			  // 判断是否需要身份认证  
			  MyAuthenticator authenticator = null;  Properties pro = mailInfo.getProperties();  
			  // 如果需要身份认证，则创建一个密码验证器  
			  if (mailInfo.isValidate()) {   
				  authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());  
			  }  
			  // 根据邮件会话属性和密码验证器构造一个发送邮件的 session  
			  Session sendMailSession = Session.getDefaultInstance(pro, authenticator);  
			  try {   
				  // 根据session创建一个邮件消息  
				  Message mailMessage = new MimeMessage(sendMailSession);   
				  // 创建邮件发送者地址  
				  Address from = new InternetAddress(mailInfo.getFromAddress());   
				  // 设置邮件消息的发送者  
				  mailMessage.setFrom(from);   
				  // 创建邮件的接收者地址，并设置到邮件消息中  
				  Address to = new InternetAddress(mailInfo.getToAddress());   
				  // Message.RecipientType.TO属性表示接收者的类型为TO   
				  mailMessage.setRecipient(Message.RecipientType.TO, to);   
				  // 设置邮件消息的主题   
				  mailMessage.setSubject(mailInfo.getSubject());   
				  // 设置邮件消息发送的时间   
				  mailMessage.setSentDate(new Date());  
				  
				  
				  
				 /* // MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象   
				  Multipart mainPart = new MimeMultipart();   
				  // 创建一个包含HTML内容的MimeBodyPart   
				  BodyPart html = new MimeBodyPart();   
				  // 设置HTML内容   
				  html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");  
				  mainPart.addBodyPart(html);  */
				  
				  
				  MimeMultipart msgMultipart = new MimeMultipart("mixed");
				  
				  //正文 文字+图片
				  MimeBodyPart contentBodyPart = new MimeBodyPart();

				  //图片与文本属于关联关系
				  MimeMultipart bodymp = new MimeMultipart("related");
				  MimeBodyPart bodypart1 = new MimeBodyPart();
				  MimeBodyPart bodypart2 = new MimeBodyPart();

				  DataSource ds3 = new FileDataSource("D://index.jpg");
				  DataHandler dataHandler3 = new DataHandler(ds3);
				  bodypart2.setDataHandler(dataHandler3);
				  bodypart2.setFileName("index.jpg");
				  
				  //  使用邮件内图片
				  bodypart2.setContentID("index");
				  bodypart1.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
				  
				//加入文本
				  bodymp.addBodyPart(bodypart1);
				//加入图片
				  bodymp.addBodyPart(bodypart2);
				  
				  contentBodyPart.setContent(bodymp);
				  msgMultipart.addBodyPart(contentBodyPart);
				  
				  
				  
				  // 将MiniMultipart对象设置为邮件内容   
				  mailMessage.setContent(msgMultipart);   
				  // 发送邮件   
				  Transport.send(mailMessage);   
				  	return true;  
				  } catch (MessagingException ex) {
					  ex.printStackTrace();  
				  }  
				  return false; 
				  }
		  }

